home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Text⁄Files / Voyeur 1.1.1 / Voyeur ƒ / MSG Shell ƒ / msg integrity.c < prev    next >
Text File  |  1994-02-25  |  3KB  |  109 lines

  1. /**********************************************************************\
  2.  
  3. File:        msg integrity.c
  4.  
  5. Purpose:    This module implements a quick-and-dirty integrity check;
  6.             compare the resource fork and map length to stored values.
  7.             (Drop the completed application on "Prepare" to store
  8.             these values in the right place.)
  9.  
  10. Voyeur -- a no-frills file viewer
  11. Copyright ©1993-4, Mark Pilgrim
  12.  
  13. This program is free software; you can redistribute it and/or modify
  14. it under the terms of the GNU General Public License as published by
  15. the Free Software Foundation; either version 2 of the License, or
  16. (at your option) any later version.
  17.  
  18. This program is distributed in the hope that it will be useful,
  19. but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21. GNU General Public License for more details.
  22.  
  23. You should have received a copy of the GNU General Public License
  24. along with this program in a file named "GNU General Public License".
  25. If not, write to the Free Software Foundation, 675 Mass Ave,
  26. Cambridge, MA 02139, USA.
  27.  
  28. \**********************************************************************/
  29.  
  30. #include "msg integrity.h"
  31. #include "msg graphics.h"
  32. #include "msg dialogs.h"
  33. #include "msg environment.h"
  34. #include "program globals.h"
  35.  
  36. void DoIntegrityCheck(void)
  37. {
  38.     int                thisFile;
  39.     long            count;
  40.     long            resDataLength, checkData;
  41.     long            resMapLength, checkMap;
  42.     Boolean            problem;
  43.     FSSpec            temp;
  44.     int                i;
  45.     CInfoPBRec        pb;
  46.     OSErr            theError;
  47.     
  48.     problem=FALSE;
  49.     FlushVol(0L, 0);
  50.  
  51.     pb.hFileInfo.ioCompletion=0L;
  52.     pb.hFileInfo.ioNamePtr=CurApName;
  53.     pb.hFileInfo.ioVRefNum=0;
  54.     pb.hFileInfo.ioFDirIndex=0;
  55.     pb.hFileInfo.ioDirID=0;
  56.     theError=PBGetCatInfo(&pb, FALSE);
  57.     if (theError!=noErr)
  58.         problem=TRUE;
  59.  
  60.     if (!problem)
  61.     {
  62.         for (i=pb.hFileInfo.ioNamePtr[0]; i>=0; i--)
  63.             temp.name[i]=pb.hFileInfo.ioNamePtr[i];
  64.         temp.vRefNum=0;
  65.         temp.parID=pb.hFileInfo.ioFlParID;
  66.         
  67.         if (gHasFSSpecs)
  68.             theError=FSpOpenRF(&temp, fsRdPerm, &thisFile);
  69.         else
  70.             theError=HOpenRF(temp.vRefNum, temp.parID, temp.name, fsRdPerm, &thisFile);
  71.         problem=(theError!=noErr);
  72.     }
  73.     if (!problem)
  74.     {
  75.         SetFPos(thisFile, 1, 8L);
  76.         count=4L;
  77.         problem=(FSRead(thisFile, &count, (Ptr)(&resDataLength))!=noErr);
  78.     }
  79.     if (!problem)
  80.     {
  81.         SetFPos(thisFile, 1, 12L);
  82.         count=4L;
  83.         problem=(FSRead(thisFile, &count, (Ptr)(&resMapLength))!=noErr);
  84.     }
  85.     if (!problem)
  86.     {
  87.         SetFPos(thisFile, 1, 144L);
  88.         count=4L;
  89.         problem=(FSRead(thisFile, &count, (Ptr)(&checkData))!=noErr);
  90.     }
  91.     if (!problem)
  92.     {
  93.         SetFPos(thisFile, 1, 148L);
  94.         count=4L;
  95.         problem=(FSRead(thisFile, &count, (Ptr)(&checkMap))!=noErr);
  96.     }
  97.     
  98.     if (!problem)
  99.         problem=((resDataLength!=checkData) || (resMapLength!=checkMap));
  100.  
  101.     if (problem)
  102.     {
  103.         ParamText(APPLICATION_NAME, "\p", "\p", "\p");
  104.         PositionDialog('ALRT', integrityCheckFailAlert);
  105.         StopAlert(integrityCheckFailAlert,0L);
  106.         ExitToShell();
  107.     }
  108. }
  109.